在 [Day 3] Kotlin 語法 - 類別 ( Class ) 一文中提到了 class 的建構子與 class 的寫法。
而今天要討論的是更延伸的用法與介紹 object 的觀念。
首先要提到,我們的生活周遭抑或是我們本身,皆可以用物件導向來比喻、解說,而物件導向中的物件( object ),即是我們所看到是所有物品甚至是人物,皆可歸類為 object。
文字有點抽象,用真實生活來比喻,現在你手上的電腦、路上跑的車子、甚至是你本身,都可以歸類為 object。
[Day 3] Kotlin 語法 - 類別 ( Class ) 中有舉個車子的例子,就以車子來做比喻。
首先,我們會先將車子這個 class 所有的屬性、行為封裝成一個 class。
open class Car() {
var weight = 1500
open fun drive() {
//Car is driving
}
}
我們會有一個 car class ,裡面有個屬性 - 車子的重量、有個行為 - 車子可以駕駛,到這邊這還不算是一台在路上跑的車子。
val Altis = Car()
val VIOS = Car()
val Tucson = Car()
val RAV4 = Car()
在這例子中,我使用 Car 這個 Class 建立了四個實體( object )的車子,而因為這四個 object 都是用 Class Car 來建立的,故這四個 object 的 weight 屬性與 drive 行為,皆來自於 Class Car。
最近 Tesla 很紅,但因為不是傳統的油車,平常駕駛是使用電能,若放在同一個 Class ,那創建出來的 object 駕駛模式該耗油還是電能呢?
所以原先的 drive 已經不適用於新的 Class,這個時候就可以利用繼承( extend )。
open class Car() {
var weight = 1500
open fun drive() {
//Car is driving
}
}
class Tesla(): Car() {
override fun drive() {
//Car is driving by Electric
}
}
在 Java 中,繼承使用的關鍵字為 extend 而在 kotlin 裡則是使用 : ,繼承的話表示父類別所擁有的屬性、行為 子類別皆有,而這個例子中的 drive 因為必須用不同的方式駕駛,故需要 override 為適合的 function 。
修飾符在上面的範例程式碼,可以看到有一些 class 或是 function 前有加 open 修飾符,可以看到上表,因為 kotlin 預設為 final 是不可被繼承與 override ,故若要被繼承或者被 override ,需事先加上 open 修飾符。